package vip.aster.workflow.service;

import com.alibaba.fastjson2.JSONObject;
import org.flowable.bpmn.model.BpmnModel;
import vip.aster.common.utils.PageInfo;
import vip.aster.workflow.bo.ProcessNode;
import vip.aster.workflow.entity.WfForm;
import vip.aster.workflow.query.InstanceQuery;
import vip.aster.workflow.vo.SubmitFormVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 流程 接口
 * </P>
 *
 * @author Aster lipian1004@163.com
 * @since 2024-04-15 14:28:44
 */
public interface ProcessService {

    /**
     * 创建BPMN对象
     *
     * @param id
     * @param name
     * @param processNode
     * @return
     */
    BpmnModel createBpmnModel(String id, String name, ProcessNode processNode);

    /**
     * 部署流程
     *
     * @param entity 流程表单
     */
    void deployment(WfForm entity);

    /**
     * 提交表单并启动流程
     *
     * @param submitFormVO 表单数据
     */
    void submit(SubmitFormVO submitFormVO);

    /**
     * 查询待办数据
     *
     * @param query 查询条件
     * @return 待办数据
     */
    PageInfo<Map<String, Object>> selectTask(Map<String, Object> query);


    /**
     * 获取所有已审批通过的流程实例
     *
     * @param code 表单编码
     * @return list
     */
    List<JSONObject> selectCompletedInstances(String code);

    /**
     * 验证表是否存在
     *
     * @param tableName 表名
     * @return true/false
     */
    boolean isTableExists(String tableName);

    /**
     * 流程实例分页
     *
     * @param code          表单编码
     * @param instanceQuery 查询条件
     * @return 分页
     */
    PageInfo<JSONObject> selectInstancePageByCode(String code, InstanceQuery instanceQuery);
}
